#pragma once
#include <string>
#include <list>
#include <stack>
#include "LGrammarRule.h"

class LGrammar {
public:
	LGrammar();
	LGrammar(const LGrammar &rhs);
	LGrammar& operator=(const LGrammar &rhs);
	~LGrammar();
	void setStartString(std::string start);
	void addRule(LGrammarRule *rule);
	char getNextChar(void);
	void setDepth(int d);
	void reset(void);
private:
	std::string getStartString(void);
	std::string getRule(char nonTerminal);

	std::string startString;
	std::vector<LGrammarRule*> rules;

	std::stack<std::string> strStack;
	std::stack<int> indexStack;
	std::string curString;
	int curIndex;
	int depth;
};